package com.coder.util;

import java.util.Random;

/**
 * 随机生成器
 *
 * @author yuhushuan
 * @date 2020/8/13 21:08
 */
public class RandomGenerator {
    private static Random r = new Random(47);

    public static class Boolean implements Generator<java.lang.Boolean> {

        @Override
        public java.lang.Boolean next() {
            return r.nextBoolean();
        }
    }

    public static class Byte implements Generator<java.lang.Byte> {

        @Override
        public java.lang.Byte next() {
            return (byte) r.nextInt();
        }
    }

    public static class Character implements Generator<java.lang.Character> {

        @Override
        public java.lang.Character next() {
            return CountingGenerator.chars[r.nextInt(CountingGenerator.chars.length)];
        }
    }

    public static class String extends CountingGenerator.String {
        {
            cg = new Character();
        }

        public String() {
        }

        public String(int length) {
            super(length);
        }
    }

    public static class Short implements Generator<java.lang.Short> {

        @Override
        public java.lang.Short next() {
            return (short) r.nextInt();
        }
    }

    public static class Integer implements Generator<java.lang.Integer> {
        private int mod = 10000;// 模数

        public Integer() {
        }

        public Integer(int modulo) {
            mod = modulo;
        }

        @Override
        public java.lang.Integer next() {
            return r.nextInt(mod);
        }
    }

    public static class Long implements Generator<java.lang.Long> {
        private int mod = 10000; // 模数

        public Long() {
        }

        public Long(int modulo) {
            mod = modulo;
        }

        @Override
        public java.lang.Long next() {
            return (long) r.nextInt(mod);
        }
    }

    public static class Float implements Generator<java.lang.Float> {

        @Override
        public java.lang.Float next() {
            // 修剪除前两位小数以外的所有内容
            int trimmed = Math.round(r.nextFloat() * 100);
            return (float) trimmed / 100;
        }
    }

    public static class Double implements Generator<java.lang.Double> {
        private double value = 0.0;

        @Override
        public java.lang.Double next() {
            int trimmed = Math.round(r.nextFloat() * 100);
            return (double) trimmed / 100;
        }
    }
}
